package cn.itcast.nems.order.service;


import cn.itcast.ic.common.bean.Page;
import cn.itcast.nems.order.api.OrderApi;
import cn.itcast.nems.order.dao.dataobject.OrderDO;
import cn.itcast.nems.order.dao.entity.Order;
import cn.itcast.nems.order.dto.NewOrderDTO;
import cn.itcast.nems.order.dto.OrderPaymentResultDTO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 销售订单-头 服务类
 * </p>
 *
 * @author liyong
 * @since 2023-08-31
 */
public interface OrderService extends OrderApi {
    /**
     * 
     * 功能描述：根据OrderNo查询订单头
     *
     * @param orderNo 订单号
     * @return 业务订单
     * 
     * @author 刘曙
     *
     * @since 2023年9月22日
     *
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     */
    Order getByOrderNo(String orderNo);
    
    /**
     * 
     * 功能描述：根据业务订单号查询订单
     *
     * @param orderBizNo 业务订单号
     * @return 订单头
     * 
     * @author 刘曙
     *
     * @since 2023年9月22日
     *
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     */
    Order getByOrderBizNo(String orderBizNo);
    
    /**
     * 功能描述：订单支付成功
     *
     * @param paymentResult 支付结果数据
     * @return 订单支付流水号
     * @author 刘曙
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     * @since 2023年9月11日
     */
    List<String> paymentSuccess(OrderPaymentResultDTO paymentResult);

    /**
     * 分页查询
     *
     * @param orderDO 搜索条件
     * @return 分页数据
     */
    Page<OrderDO> list(Integer pageNumber, Integer pageSize, OrderDO orderDO);

    Map<String, Object> orderInfo(String orderId);

    /**
     * 根据客户名获取订单编号
     * @param customerName
     * @return
     */
    List<Map<String, Object>> listOrderNoByCustomerName(String customerName);

    /**
     * 根据 code 查询主数据
     *
     * @param orderDTO
     * @param paymentTypeCode
     * @param businessLineCode
     * @param originChanelCode
     */
    void findAndInvokeBaseData(NewOrderDTO orderDTO, String paymentTypeCode , String businessLineCode , String originChanelCode );

    void sendMessageAfterCanceled(Order order) ;

    /**
     * 功能描述:
     *  获取单据id
     * @param	orderId 订单编号
     * @param	orderSource 订单来源：新报名｜NEW、升级｜RENEWAL、转班｜TRANSFER、重读/留级｜REPEAT
     * @return
     * @author 陈早庆
     * @update:[变更日期2023年12月14日][更改人姓名][变更描述]
     * @since 2023年12月14日
     */
    String getJournalById(String orderId, String orderSource);
}
